package com.example.himalaya.model.api;


import com.ximalaya.ting.android.opensdk.constants.DTransferConstants;
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest;
import com.ximalaya.ting.android.opensdk.datatrasfer.IDataCallBack;
import com.ximalaya.ting.android.opensdk.model.album.AlbumList;
import com.ximalaya.ting.android.opensdk.model.album.BatchAlbumList;
import com.ximalaya.ting.android.opensdk.model.category.CategoryList;
import com.ximalaya.ting.android.opensdk.model.tag.TagList;
import com.ximalaya.ting.android.opensdk.model.track.TrackList;

import java.util.HashMap;
import java.util.Map;

/**
 * 3.2 点播数据接口
 */
public class OnDemandDataApi {

    private OnDemandDataApi() {

    }

    private static OnDemandDataApi sOnDemandDataApi;

    public static OnDemandDataApi getOnDemandDataApi() {
        if (sOnDemandDataApi == null) {
            synchronized (OnDemandDataApi.class) {
                if (sOnDemandDataApi == null) {
                    sOnDemandDataApi = new OnDemandDataApi();
                }
            }
        }

        return sOnDemandDataApi;
    }

    /**
     * 3.2.1 获取喜马拉雅内容分类
     *
     * @param specificParams 配置对象
     * @param callback       回调函数
     */
    public void getCategories(final Map<String, String> specificParams, final IDataCallBack<CategoryList> callback) {
        Map<String, String> map = new HashMap<String, String>();
        CommonRequest.getCategories(map, callback);
    }

    /**
     * 3.2.2 获取专辑标签或者声音标签
     *
     * @param type     0 -专辑标签 1 - 声音标签
     * @param callback 回调函数
     */
    public void getTags(int type, final IDataCallBack<TagList> callback) {
        Map<String, String> map = new HashMap<String, String>();
        map.put(DTransferConstants.CATEGORY_ID, "0");       // 热门分类
        map.put(DTransferConstants.TYPE, "");
        CommonRequest.getTags(map, callback);
    }

    /**
     * 3.2.3 根据分类和标签获取某个分类某个标签下的专辑列表（最火/最新/最多播放）
     *
     * @param callback 获取专辑的回调
     * @param page     第几页
     * @param count    获取的数量
     */
    public void getAlbumList(int page, int count, final IDataCallBack<AlbumList> callback) {
        Map<String, String> map = new HashMap<>();
        // 必填
        map.put(DTransferConstants.CATEGORY_ID, "0");       // 分类ID，指定分类，为0时表示热门分类
        map.put(DTransferConstants.CALC_DIMENSION, "3");    // 计算维度，现支持最火（1），最新（2），经典或播放最多（3）
        // 非必填
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");
        CommonRequest.getAlbumList(map, callback);
    }


    /**
     * 3.2.4 专辑浏览，根据专辑ID获取专辑下的声音列表
     *
     * @param callBack 获取专辑的回调
     * @param aid      专辑的id 必填
     * @param page     第几页
     * @param count    获取的数量
     */
    public void getTracks(long aid, int page, int count, IDataCallBack<TrackList> callBack) {
        // 根据页码和专辑id获取列表
        Map<String, String> map = new HashMap<>();
        map.put(DTransferConstants.ALBUM_ID, aid + "");
        map.put(DTransferConstants.SORT, "asc");        // 默认就是正序
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");

        CommonRequest.getTracks(map, callBack);
    }

    /**
     * 3.2.5 批量获取专辑列表
     *
     * @param album_ids 专辑ID列表，用英文逗号分隔，比如"1000,1010" 最大ID数量为200个，超过200的ID将忽略
     * @param callback  回调函数
     */
    public void getBatch(String album_ids, final IDataCallBack<BatchAlbumList> callback) {
        Map<String, String> map = new HashMap<String, String>();
        // 必填
        map.put(DTransferConstants.ALBUM_IDS, album_ids);
        CommonRequest.getBatch(map, callback);
    }

}
